package com.jjlin.chapter_5;

import java.util.*;
public class CD127{

    //括号字符串的最长有效长度（动态规划）
    public static int maxLength(String str){
        if(str == null || str.length() < 1)
            return 0;
        int len = str.length();
        int[] dp = new int[len];//dp[i]表示以str[i]结尾的有效字符串的最长长度
        int pre, res = 0;
        for(int i = 1; i < len; i++){
            char ch = str.charAt(i);
            if(ch == ')'){ //只有str[i] == ')'才有可能是有效字符串
                pre = i - dp[i - 1] - 1;
                if(pre >= 0 && str.charAt(pre) == '(') //判断和str[i - dp[i - 1] - 1]的字符是否匹配
                    dp[i] = dp[i - 1] + 2 + (pre > 0 ? dp[pre - 1] : 0); //别忘了加上dp[i - dp[i - 1] - 2]的长度
            }
            res = Math.max(res, dp[i]);
        }
        return res;
    }

    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        System.out.println(maxLength(str));
    }
}
